Python 对象类型快速概览
By Ruben Geert van den Berg under SPSS Python Basics
在我们的示例中,您会遇到诸如 Python 列表 (Python list) 或字典 (dict) 对象之类的术语。那么,我们在 Python 中可以找到哪些对象类型?它们的基本属性是什么?下表提供了一个快速概览。
Python 对象类型快速概览
类型 (Type) | 含义 (Meaning) | 可迭代 (Iterable)? | 可变 (Mutable)? | 看起来像 (Looks like) | 它是什么 (What is it)? |
---|---|---|---|---|---|
str | 字符串 (String) | 是 (Yes) | 否 (No) | apple | 0 个或多个字符的序列 |
list | 列表 (List) | 是 (Yes) | 是 (Yes) | [1,2,3] | 由位置引用的一系列对象 |
tuple | 元组 (Python tuple) | 是 (Yes) | 否 (No) | (‘apple’,‘banana’) | 由位置引用的一系列对象 |
dict | 字典 (Dictionary) | 是 (Yes) | 是 (Yes) | {1:‘apple’,2:‘banana’} | 无序的(唯一的)键集合,每个键都有一个值 |
int | 整数 (Integer number) | 否 (No) | 否 (No) | 1 | 没有小数位的数字 |
float | 浮点数 (Floating point number) | 否 (No) | 否 (No) | 1.0 | 有小数位的数字 |
function | 函数 (Python function) | 否 (No) | 否 (No) | def myfunction(): | 一段命名的代码,它接受零个或多个参数并执行某些操作 |
module | 模块 (Python module) | 否 (No) | 否 (No) | (带有 .py 扩展名的文本文件) | 一个或多个 Python 文件,定义函数和/或其他对象。 |
bool | 布尔值 (Boolean) | 否 (No) | 否 (No) | True / False | 只能指示 True (真) 或 False (假) 的对象 |
range | 范围 (Python range) | 是 (Yes) | 否 (No) | range(0, 10) | 一系列整数 |
NoneType | 空对象 (Empty object) | 否 (No) | 否 (No) | None | 没有类型的空对象 |
Python 中“可迭代 (Iterable)”是什么意思?
Python 对象如果是可迭代的 (iterable),则您可以对其进行循环。例如,您可以循环遍历 Python 字符串对象中包含的字符。但是,您不能循环遍历 Python 整数 (int) 对象。
是否可以循环遍历对象仅取决于对象的类型,而不取决于其内容。例如,您可以循环遍历一个空列表,如下所示。
***创建字符串对象 (可迭代) 并循环遍历其字符。**
begin program python3.= '13579'
myString for char in myString:
print(char)
end program.
***整数对象不可迭代。**
begin program python3.= 13579
myInt for char in myInt:
print(char) # TypeError: 'int' object is not iterable
end program.
***Python 列表是可迭代的,即使是空的。**
begin program python3.= []
myList for elem in myList:
print(elem)
end program.
Python 中“可变 (Mutable)”是什么意思?
Python 对象如果是可变的 (mutable),则可以更改它们的值。 令人困惑的是,_看起来_您可以更改字符串对象的值。 但是,这样做只是创建了一个全新的字符串对象,该对象具有相同的名称,但其值与原始字符串对象的值(可能)不同。
下面的示例通过检查修改某些字符串对象之前和之后的 Python IDs (id) 来证明这一点。
***更改字符串对象的值会创建新的字符串对象。**
begin program python3.= 'apple'
myString print(myString) # apple
print(id(myString)) # 51135968
+= 's'
myString print(myString) # apples
print(id(myString)) # 51043720
end program.
***更改列表对象的元素不会产生新的列表对象。**
begin program python3.= ['apple','banana','cherry']
myList print(myList) # ['apple', 'banana', 'cherry']
print(id(myList)) # 45378824
'durian')
myList.append(print(myList) # ['apple', 'banana', 'cherry', 'durian']
print(id(myList)) # 45378824
end program.
Python 字符串 (String) 对象
Python 字符串 (string) 仅包含 0 个或(通常)更多字符。 有关 Python 字符串方法的详细概述,请阅读 Python 字符串方法概述。 以下语法演示了一些最基本的基础知识。
***创建 Python 字符串对象并检查它。**
begin program python3.= 'apple'
myString print(type(myString)) # <type 'str'>
print(myString) # apple
end program.
***从字符串中检索最后一个元素(字符)。**
begin program python3.print(myString[-1]) # e
end program.
为什么 Python 字符串对象如此重要? 嗯,在 SPSS 中使用 Python 的一个主要目标是创建(大量的)SPSS 语法 来完成若干任务。 这样的语法被创建为一个或多个 Python 字符串对象,然后传递到 SPSS 中运行。
Python 列表 (List) 对象
Python 列表 (list) 对象由 0 个或(通常)更多个元素组成,这些元素用逗号分隔并用方括号括起来。
***创建 Python 列表对象。**
begin program python3.= ['apple','banana','cherry']
myList print(type(myList)) # <class 'list'>
print(myList) # ['apple','banana','cherry']
end program.
***按索引从列表中检索项目。**
begin program python3.print(myList[0]) # apple
end program.
列表 (List) 对象类似于元组 (Tuple),只不过它们是可编辑的(“可变的”)。 因此,许多方法可用于列表。 我们可能会在以后的教程中快速概述这些方法。
Python 元组 (Tuple) 对象
Python 元组 (tuple) 由 0 个或更多个元素组成,这些元素用括号括起来并用逗号分隔。 以下语法演示了一些基本知识。
***创建并检查元组。**
begin program python3.= ('apple','banana','cherry')
myTuple print(type(myTuple)) # <class 'tuple'>
print(myTuple) # ('apple','banana','cherry')
end program.
***从元组中提取最后一个元素。**
begin program python3.print(myTuple[-1]) # cherry
end program.
Python 元组 (tuple) 类似于 Python 列表 (list) 对象,只不过它们不可编辑(“不可变的”)。 我们通常只使用方括号从它们中提取元素。
Python 字典 (Dictionary) 对象
Python 字典 (dict) 对象由 0 个或(通常)更多个键值对组成。 只能从其键中检索值,而不能从任何索引中检索值,如下所示。
Python 字典 (dict) 键(但不是值)必须是唯一的。 键和值通常是 Python 字符串或整数对象,但从技术上讲,它们可以是任何类型,包括:
- 列表 (lists)
- 元组 (tuples)
- 字典 (dictionaries)
- 或任何其他 Python 对象。
以下语法演示了一些 Python 字典 (dict) 的基本知识。
***创建 Python 字典对象。**
begin program python3.= {'a':'apple','b':'banana','c':'cherry'}
myDict print(type(myDict)) # <class 'dict'>
print(myDict) # {'b': 'banana', 'a': 'apple', 'c': 'cherry'}
end program.
***从字典键中检索字典值。**
begin program python3.print(myDict['a']) # apple
end program.
***注意:您无法从索引中检索字典值。**
begin program python3.print(myDict[0]) # ... KeyError ...
end program.
***循环遍历字典键和值。**
begin program python3.for key,value in myDict.items():
print(key,value)
end program.
Python 整数 (Integer) 对象
Python 中的 “int” 表示整数:没有小数位的数字。
***创建并检查元组。**
begin program python3.= 5
myInt print(type(myInt)) # <class 'int'>
print(myInt) # 5
end program.
***注意 / 运算符表示 int/float 的除法。**
begin program python3.print(myInt / 2)
end program.
请注意,带有 小数位的数字在 Python 中是 浮点数 (float) 或十进制数。
Python 浮点数 (Float) 对象
带有小数位的数字是 Python 中的浮点数 (float) 或十进制数。 以下语法演示了一些基本知识。
***创建 Python 浮点数对象。**
begin program python3.= 3.0
myFloat print(type(myFloat)) # <class 'float'>
print(myFloat) # 3.0
end program.
***对于浮点数,+ 运算符表示数值加法。**
begin program python3.print(myFloat + 1) # 1.5
end program.
Python 中的浮点数 (float) 是单精度浮点数。 相比之下,SPSS 中的_所有_数字都是双精度浮点数。
Python 函数 (Functions)
Python 中的函数 (function) 由一行或多行 Python 代码组成。 这些通常完成在几种不同情况下都需要的通用任务。 下面显示了一个最小的例子。
***定义 Python 函数。**
begin program python3.def myFunction(myName = 'Ruben'):
print('Hello! My name is {}'.format(myName))
end program.
***检查函数。**
begin program python3.print(type(myFunction)) # <class 'function'>
print(myFunction) # <function myFunction at 0x00000000030A3978>
end program.
***运行带有(不带)参数的函数。**
begin program python3.# Hello! My name is Ruben
myFunction() = 'Chrissy') # Hello! My name is Chrissy
myFunction(myName end program.
请注意,此函数最多接受 1 个参数:myName。 如果未传递任何参数,则默认为 “Ruben”。
在 Python 和其他编程语言中,函数 (function) 对于使代码更短、更易于管理非常有用:我们基本上将大量代码分解为小的构建块,我们可以单独调整和纠正这些构建块。
我们将在其中定义和使用 Python 函数的一课是 SPSS - 使用 Python 克隆变量。
Python 模块 (Modules)
Python 模块 (module) 基本上由一个或多个包含 Python 代码的文本文件组成,这些文本文件带有 .py 扩展名。
***导入并检查模块。**
begin program python3.import os
print(type(os)) # <class 'module'>
print(os) # <module 'os' from 'C:\\\Program
'>
Files\\\IBM\\\SPSS\\\Statistics\\\Python3\\\lib\\\os.pyend program.
Python 模块 (module) 通常定义与特定任务相关的类和函数,例如:
- 使用正则表达式(Python re 模块);
- 与 Excel 文件交互(openpyxl 模块);
- 创建、移动、复制或删除文件和/或文件夹(Python os 模块)。
我们将在 SPSS - 使用 Python 克隆变量 中创建一些非常简单的 SPSS Python 模块 (module)。
Python 布尔 (Boolean) 对象
布尔 (Boolean) 对象只是 True (真) 或 False (假)。 它们用于指定您是否要执行某些任务。 此外,条件会隐式地产生布尔值(如果满足条件,则为 True (真),否则为 False (假))。
***创建并检查 Python 布尔对象。**
begin program python3.= True
myBoolean print(type(myBoolean)) # <class 'bool'>
print(myBoolean) # True
end program.
***在 IF 语句中使用布尔值。**
begin program python3.if myBoolean:
print('Yes!')
else:
print('No!')
end program.
***IF 语句中的隐式布尔值。**
begin program python3.if 'a' in 'banana':
print('Yes!')
else:
print('No!')
end program.
***使用布尔值作为函数参数。**
begin program python3.= [5,2,8,1,9]
myList print(sorted(myList,reverse = True)) # [9, 8, 5, 2, 1]
end program.
Python 范围 (Range) 对象
Python 范围 (range) 对象在循环时会创建一系列连续整数。 请注意,range(10) 会产生 0 到 9。对于 1 到 10,请使用 range(1,11)。
***创建并检查范围对象。**
begin program python3.= range(10)
myRange print(type(myRange)) # <class 'range'>
print(myRange) # range(0, 10)
end program.
***循环遍历数字 1 - 10。**
begin program python3.for myInt in range(1,11):
print(myInt)
end program.
Python NoneType 对象
Python 中的 NoneType 对象指示已声明但尚未具有任何值的空对象。
***创建并检查 NoneType 对象。**
begin program python3.= None
myNone print(type(myNone)) # <class 'NoneType'>
print(myNone) # None
end program.
使用 spssdata 模块读取 SPSS 数据值时,缺失值 通常会导致 Python 中出现 NoneType 对象。 此外,可选参数有时在 Python 函数中将 None 作为其默认值。